unit templint_frm;

{$mode objfpc}{$H+}

interface

uses
  Classes, SysUtils, db, FileUtil, LResources, Forms, Controls, Graphics,
  Dialogs, ExtCtrls, StdCtrls, DBGrids, ZDataset, datamodule_frm;

type

  { TTemplate_int }

  TTemplate_int = class(TForm)
    btelimina: TButton;
    bteliminaext: TButton;
    btnuovo: TButton;
    btnuovoext: TButton;
    btsalva: TButton;
    btsalvaext: TButton;
    cblavorazioni: TComboBox;
    cbTemplate: TComboBox;
    Datasource1: TDatasource;
    DBGrid1: TDBGrid;
    edcampo: TLabeledEdit;
    edNome: TLabeledEdit;
    Label1: TLabel;
    Label2: TLabel;
    edvalore: TMemo;
    Panel1: TPanel;
    Panel2: TPanel;
    Panel3: TPanel;
    zq_ext: TZQuery;
    zq_template: TZReadOnlyQuery;
    procedure bteliminaClick(Sender: TObject);
    procedure bteliminaextClick(Sender: TObject);
    procedure btnuovoClick(Sender: TObject);
    procedure btnuovoextClick(Sender: TObject);
    procedure btsalvaClick(Sender: TObject);
    procedure btsalvaextClick(Sender: TObject);
    procedure cblavorazioniChange(Sender: TObject);
    procedure cbTemplateChange(Sender: TObject);
    procedure DBGrid1CellClick(Column: TColumn);
    procedure DBGrid1DblClick(Sender: TObject);
    procedure edNomeChange(Sender: TObject);
    procedure FormClose(Sender: TObject; var CloseAction: TCloseAction);
    procedure FormShow(Sender: TObject);
    procedure LoadComboTemplate();
    procedure loadcombolavorazioni();
    procedure ClearCampi();
  private
    { private declarations }
  public
    { public declarations }
  end; 

var
  Template_int: TTemplate_int;

implementation

{ TTemplate_int }

procedure TTemplate_int.FormClose(Sender: TObject; var CloseAction: TCloseAction
  );
begin
     CloseAction:=caFree;
end;

procedure Ttemplate_int.LoadComboTemplate();
begin
//svuota combo
cbTemplate.Clear;
with zq_template do
        begin
             Close;
             sql.Clear;
             sql.Add('SELECT IDTEMPLATE, IDDITTA, NOME_TEMPLATE FROM INTERVENTI_TEMPL');
             sql.add('WHERE IDDITTA=:IDDITTA');
             sql.add('ORDER BY IDTEMPLATE');
             ParamByName('IDdITTA').AsInteger:=DataModule1.idditta;
             ExecSQL;
             Open;
             while not EOF do
             begin
                  //carico il campo NOME di ogni singolo record nella combo di visualizzazione
                  cbTemplate.Items.AddObject(FieldByName('NOME_TEMPLATE').AsString,TObject(FieldByName('IDTEMPLATE').AsInteger));
                  Next;
             end;
        end
end;

procedure Ttemplate_int.ClearCampi();
begin
  cbTemplate.ClearSelection;
  edNome.Clear;
  btsalva.Enabled:=False;
  Panel2.Enabled:=false;
  zq_ext.Close;
  edcampo.Clear;
  edvalore.Clear;
  cblavorazioni.ClearSelection;
  btsalvaext.Caption:='Aggiungi';
  bteliminaext.Enabled:=false;
end;

procedure TTemplate_int.cbTemplateChange(Sender: TObject);
begin
   if cbTemplate.ItemIndex <>-1 then
     begin
          with zq_template do
          begin
               Close;
               sql.Clear;
               sql.Add('SELECT * FROM INTERVENTI_TEMPL WHERE IDTEMPLATE=:ID');
               ParamByName('ID').AsInteger:=integer(cbTemplate.Items.Objects[cbTemplate.ItemIndex]);
               ExecSQL;
               Open;
               edNome.Text:=FieldByName('NOME_TEMPLATE').AsString;
          end;
          panel2.Enabled:=true;
          with zq_ext do
          begin
              //seleziono tutti i campi che fanno capo a questo id
              close;
              sql.clear;
              sql.add('SELECT IDTEMPLATE_EXT,NOME_CAMPO,VALORE FROM INTERVENTI_TEMPL_DATA '+
                      'WHERE IDTEMPLATE=:ID '+
                      'ORDER BY NOME_CAMPO');
              ParamByName('ID').AsInteger:=integer(cbTemplate.Items.Objects[cbTemplate.ItemIndex]);
              ExecSQL;
              open;
          end;
          with DBGrid1 do
          begin
               Columns[0].Visible:=false;
               Columns[1].Width:=50;
               Columns[1].Title.Caption:='Campo';
               Columns[2].Title.Caption:='Valore';
          end;
     end;
end;

procedure TTemplate_int.DBGrid1CellClick(Column: TColumn);
begin
    DBGrid1DblClick(self);
end;

procedure TTemplate_int.DBGrid1DblClick(Sender: TObject);
begin
      //carico i dati nella form di modifica
 edcampo.Text:=zq_ext.FieldByName('Nome_campo').AsString;
 edvalore.Text:=zq_ext.FieldByName('valore').AsString;
  //se viene selezionata una cella cambio la caption del pulsante per il salvataggio
  btsalvaext.Caption:='Salva';
  bteliminaext.Enabled:=true;
end;

procedure TTemplate_int.btnuovoClick(Sender: TObject);
begin
     //pulisce tutti i campi per consentire un nuovo inserimento
  ClearCampi();
  ednome.SetFocus;
end;

procedure TTemplate_int.btnuovoextClick(Sender: TObject);
begin
  // deseleziono i record delle estensioni
  //cambio la caption del pulsante per salvare
  //refresho la griglia e pulisco i campi
  zq_ext.Refresh;
  edcampo.Clear;
  edvalore.Clear;
  cblavorazioni.ClearSelection;
  btsalvaext.Caption:='Aggiungi';
  bteliminaext.Enabled:=false;
end;

procedure TTemplate_int.btsalvaClick(Sender: TObject);
begin
   //salvo l'azienda controllo partita iva o cf

  //controllo che i parametri obbligatori (denominazione) siano inseriti sia
  //per la modifica che per l'inserimento
  if ednome.Text='' then
  begin
       ShowMessage('Devi indicare la denominazione del template.');
       ednome.SetFocus ;
       Exit();
  end;
  if cbTemplate.Text<>'' then
     begin
     ////////////////////////////////////////////////////////////////////
     ///              MODIFICA AZIENDA
     ////////////////////////////////////////////////////////////////////
     //Se è stato selezionato un'azienda dalla combo procedi con la modifica
     with zq_template do
     begin
          Close;
          sql.Clear;
          sql.Add('UPDATE INTERVENTI_TEMPL SET '+
          'NOME_TEMPLATE=:NOME_TEMPLATE '+
          'WHERE IDTEMPLATE=:ID');
          ParamByName('ID').AsInteger:=integer(cbTemplate.Items.Objects[cbTemplate.ItemIndex]);
          ParamByName('NOME_TEMPLATE').AsString:=ednome.Text;
          ExecSQL;
          //riaggiorna la lista delle aziende nelle combo
          LoadComboTemplate();
          //comunica l'esito positivo della modifica
          ShowMessage(edNome.Text+ ' è stato modifiinto correttamente.');
     end
     end
     else
     begin
     ////////////////////////////////////////////////////////////////////
     ///              INSERIMENTO AZIENDA
     ////////////////////////////////////////////////////////////////////
     //inserisci la nuova azienda nel DB
     with zq_template do
     begin
          Close;
          sql.Clear;
          sql.Add('INSERT INTO INTERVENTI_TEMPL ('+
          'NOME_TEMPLATE,'+
          'IDDITTA'+
          ') VALUES (:NOME_TEMPLATE,:IDDITTA)');
          ParamByName('NOME_TEMPLATE').AsString:=edNome.Text;
          ParamByName('IDdITTA').AsInteger:=DataModule1.idditta;
          ExecSQL;
          //riaggiorna la lista delle aziende nelle combo
          LoadComboTemplate();
          //comunica l'esito positivo dell'inserimento
          ShowMessage(edNome.Text+ ' è stato inserito correttamente.');
          ednome.SetFocus;
     end
     end ;
     btnuovoClick(self);
end;

procedure TTemplate_int.btsalvaextClick(Sender: TObject);
begin
   //salvo o modifico il campo selezionato
  if btsalvaext.Caption='Salva' then
     begin
          //procedo con il salvataggio della MODIFICA
          with zq_template do
               begin
                    close;
                    sql.Clear;
                    sql.add('UPDATE INTERVENTI_TEMPL_DATA ' +
                            'SET NOME_CAMPO=:NOME, VALORE=:VALORE '+
                            'WHERE IDTEMPLATE_EXT=:ID');
                    ParamByName('NOME').Asinteger:=strtoint(edcampo.Text);
                    ParamByName('VALORE').AsString:=edvalore.Text;
                    ParamByName('ID').AsInteger:=zq_ext.FieldByName('idtemplate_ext').AsInteger;
                    ExecSQL;
               end;
     end
  else
      begin
           //procedo con l'INSERIMENTO
            with zq_template do
               begin
                    close;
                    sql.Clear;
                    sql.add('INSERT INTO INTERVENTI_TEMPL_DATA ' +
                            '(IDTEMPLATE,NOME_CAMPO,VALORE) '+
                            'VALUES (:IDTEMPLATE,:NOME,:VALORE)');
                    ParamByName('NOME').Asinteger:=strtoint(edcampo.Text);
                    ParamByName('VALORE').AsString:=edvalore.Text;
                    ParamByName('IDTEMPLATE').AsInteger:=integer(cbTemplate.Items.Objects[cbTemplate.ItemIndex]);
                    ExecSQL;
               end;
      end;
  //refresho la griglia e pulisco i campi
btnuovoextClick(self);
end;

procedure TTemplate_int.cblavorazioniChange(Sender: TObject);
begin
   if cblavorazioni.ItemIndex <>-1 then
     begin
          with zq_template do
          begin
               Close;
               sql.Clear;
               sql.Add('SELECT * FROM ANAGLAVORAZIONI WHERE IDLAVORAZIONE=:ID');
               ParamByName('ID').AsInteger:=integer(cblavorazioni.Items.Objects[cblavorazioni.ItemIndex]);
               ExecSQL;
               Open;
               edcampo.Text:=FieldByName('IDLAVORAZIONE').AsString;
               edvalore.Text:=FieldByName('NOME').AsString;
          end;
     end;
end;

procedure TTemplate_int.bteliminaClick(Sender: TObject);
begin

   //controllo che sia stata selezionata un azienda sennò avverto
   //che è necessario selezionarne una
   if cbTemplate.ItemIndex<>-1 then
   begin
      //chiede conferma e poi cancella il record
      if MessageDlg('Si sta per eliminare '+edNome.Text+' dal database. Continuare?',mtInformation, mbOKCancel, 0)= mrOK     then
      begin
      //chiede conferma e poi cancella il record
      if MessageDlg('Sei veramente sicuro??',mtInformation, mbOKCancel, 0)= mrOK     then
      begin
           with zq_template do
           begin
                Close;
                sql.Clear;
                sql.Add('DELETE FROM INTERVENTI_TEMPL WHERE IDTEMPLATE=:ID');
                ParamByName('ID').AsInteger:=integer(cbTemplate.Items.Objects[cbTemplate.ItemIndex]);
                ExecSQL;

                Close;
                sql.Clear;
                sql.Add('DELETE FROM INTERVENTI_TEMPL_DATA WHERE IDTEMPLATE=:ID');
                ParamByName('ID').AsInteger:=integer(cbTemplate.Items.Objects[cbTemplate.ItemIndex]);
                ExecSQL;
           end;
           //rilegge tutte le aziende e le carica nelle combo
           LoadComboTemplate();
           //pulisce tutti i campi
           ClearCampi();
      end
      end
   end
   else ShowMessage('Per eliminare un template è necessario prima selezionarne uno dalla lista.');

end;

procedure TTemplate_int.bteliminaextClick(Sender: TObject);
begin
//chiede conferma e poi cancella il record
      if MessageDlg('Si sta per eliminare il campo '+edcampo.Text+' dal database. Continuare?',mtInformation, mbOKCancel, 0)= mrOK     then
      begin
    //cancelo il record selezionato
  with zq_template do
       Begin
            close;
            sql.Clear;
            sql.add('DELETE FROM INTERVENTI_TEMPL_DATA '+
                    'WHERE IDTEMPLATE_EXT=:ID');
            ParamByName('ID').AsInteger:=zq_ext.FieldByName('idtemplate_ext').AsInteger;
            ExecSQL;
       end;
  btnuovoextClick(self);
      end;
end;

procedure TTemplate_int.edNomeChange(Sender: TObject);
begin
       btsalva.Enabled:=true;
end;

procedure TTemplate_int.FormShow(Sender: TObject);
begin
    //seleziono tutte le template e popolo le combobox
  LoadComboTemplate();
  loadcombolavorazioni();
end;


procedure Ttemplate_int.loadcombolavorazioni();
begin
 //svuota combo
cblavorazioni.Clear;
with zq_template do
        begin
             Close;
             sql.Clear;
             sql.Add('SELECT IDLAVORAZIONE, NOME FROM ANAGLAVORAZIONI');
             sql.add('WHERE IDDITTA=:DITTA');
             sql.add('ORDER BY IDLAVORAZIONE');
             ParamByName('DITTA').AsInteger:=datamodule1.idditta;
             ExecSQL;
             Open;
             while not EOF do
             begin
                  //carico il campo ID e NOME di ogni singolo record nella combo di visualizzazione
                  //di tutte le lavorazioni
                  cblavorazioni.Items.AddObject(FieldByName('IDLAVORAZIONE').AsString+' '+FieldByName('NOME').AsString,TObject(FieldByName('IDLAVORAZIONE').AsInteger));
                  Next;
             end;
             close;
        end
end;

initialization
  {$I templint_frm.lrs}

end.

